#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <sys/types.h>
#include <sys/wait.h>

int main()
{
  printf("I'm a process, pid = %d\n", getpid());
  execl("/usr/bin/llllls", "ls", "-a", "-l", NULL);
  exit(1);
}


//int main()
//{
//  pid_t id = fork();
//  if (id == 0)
//  {
//    sleep(5);
//    printf("I'm a process, pid = %d\n", getpid());
//    execl("/usr/bin/ls", "ls", "-a", "-l", NULL);
//    printf("hello world\n");
//    printf("hello world\n");
//    printf("hello world\n");
//    printf("hello world\n");
//    exit(1);
//  }
//  while (1)
//  {
//    printf("I'm father\n");
//    sleep(1);
//  }
//  pid_t ret = waitpid(id, NULL, 0);
//  printf("wait success , child pid = %d", ret);
//  return 0;
//
//}

//int main()
//{
//  pid_t id = fork();
//  if (id == 0)
//  {
//    //child
//    int count = 5;
//    while (count){
//      printf("I am  child. my pid = %d, count = %d\n", getpid(), count);
//      sleep(1);
//      count--;
//    }
//    exit (10);
//  }
//  int status = 0;
//  while (1)
//  {
//    pid_t ret = waitpid(id, &status, WNOHANG);
//    if (ret == 0)
//    {
//      //子进程还未退出，继续等待
//      printf("father do something\n");
//      sleep(2);
//    }
//    else if (ret > 0)
//    {
//      //子进程退出，获取退出信息
//      printf("father wait : %d success, status exit cond = %d, status exit singal = %d\n", ret, WEXITSTATUS(status), status & 0x7f);
//      break;
//    }
//    else 
//    {
//      printf("wait fail\n");
//      break;
//    }
//  }
//  //pid_t ret = waitpid(id, &status, 0);
//  //printf("I'm father\n");
//  //if (ret){
//  //  if (WIFEXITED(status))
//  //  {
//  //    printf("exit code = %d\n", WEXITSTATUS(status));
//  //  }
//  //  else {
//  //    printf("catch a singal = %d\n", status & 0x7f);
//  //  }
//  //  //printf("Father wait success\n");
//  //  //printf("child pid = %d, exit = %d signal = %d\n", ret, (status >> 8) & 0xFF, status& 0x7f);
//  //}
//  //else{ 
//  //  printf("wait failed\n");
//  //}
//  return 0;
//}
//
//
//
//
//
//
//
//
//
//
//
//
//
//
//
//
//
//
//
//
//
//
//
////int fun()
////{
////  printf("fun\n");
////  exit(12);
////  return 1;
////}
////
////int main()
////{
////  fun();
////  for (int i = 0; i < 100; i++)
////  {
////    printf("%d:%s\n",i, strerror(i));
////  }
////  return 0;
////}
